package Pantallas;

import Entidades.Empleado;
import Excepciones.NonexistentEntityException;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.BevelBorder;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EmptyBorder;

public class Captura extends javax.swing.JFrame {

    //objecto usado para realizar todas las operaciones relacionadas al Fingerprint-SDK
    private Controladores.ControladorEmpleado controladorEmpleado;
    private Empleado emple;
    //Panel para mostrar la huella digital
    private JPanel fingerprintViewPanel = null;
    //Imagen de la huella actual
    private BufferedImage fingerprintImage = null;

    /**
     * Crea una nueva forma de Captura
     */
    public Captura(Empleado empleado) {
        this.emple = empleado;
        inicializar();
        initComponents();
        controladorEmpleado.inicializarCaptura();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void inicializar() {

        this.controladorEmpleado = new Controladores.ControladorEmpleado(this);
    }

    /**
     * Crea el panel que contendrá la imagen de la huella digital
     */
    private JComponent crearPanelHuella() {
        //Crea un panel nuevo para mostrar la huella
        fingerprintViewPanel = new JPanel() {
            //Se sobreescribe el método paintComponent para habilitar la muestra de la imagen de la huella
            public void paintComponent(Graphics g) {
                super.paintComponent(g);

                //Si hay una imagen para ser mostrada
                if (fingerprintImage != null) {
                    //Calcula el tamaño y posición de la imagen para ser pintada
                    //el tamaño es ajustado para que ocupe todo el tamaño del panel
                    Insets insets = getInsets();
                    int transX = insets.left;
                    int transY = insets.top;
                    int width = getWidth() - getInsets().right - getInsets().left;
                    int height = getHeight() - getInsets().bottom - getInsets().top;
                    //Se dibuja la imagen
                    g.drawImage(fingerprintImage, transX, transY, width, height, null);
                }

            }
        };

        //Se agrega un border alrededor del panel
        fingerprintViewPanel.setBorder(new CompoundBorder(
                new EmptyBorder(2, 2, 2, 2),
                new BevelBorder(BevelBorder.LOWERED)));

        fingerprintViewPanel.setToolTipText("Imagen de la última huella capturada.");

        if (fingerprintViewPanel == null) {
            return null;
        } else {

            return fingerprintViewPanel;
        }

    }

    /**
     * Método utilizado para mostrar la imagen de la huella en el panel
     * correspondiente.
     */
    public void showImage(BufferedImage image) {
        //Utiliza el imageProducer para crear una imagen de la huella digital
        fingerprintImage = image;
        //Se dibuja la nueva imagen
        repaint();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel2 = new javax.swing.JPanel();
        btnGuardar = new javax.swing.JButton();
        PanelContenedor = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setResizable(false);
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowActivated(java.awt.event.WindowEvent evt) {
                formWindowActivated(evt);
            }
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(new javax.swing.border.SoftBevelBorder(javax.swing.border.BevelBorder.RAISED), "Acciones", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION));

        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Pantallas/guardar.jpeg"))); // NOI18N
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
        jPanel2.setLayout(jPanel2Layout);
        jPanel2Layout.setHorizontalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(btnGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(98, 98, 98))
        );
        jPanel2Layout.setVerticalGroup(
            jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel2Layout.createSequentialGroup()
                .addComponent(btnGuardar, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 34, Short.MAX_VALUE))
        );

        PanelContenedor.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Huella Digital", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.DEFAULT_POSITION));
        PanelContenedor.setLayout(new java.awt.BorderLayout());

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(10, 10, 10)
                .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
            .addComponent(PanelContenedor, javax.swing.GroupLayout.PREFERRED_SIZE, 364, javax.swing.GroupLayout.PREFERRED_SIZE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(PanelContenedor, javax.swing.GroupLayout.PREFERRED_SIZE, 353, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        PanelContenedor.getAccessibleContext().setAccessibleParent(jPanel2);

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void formWindowActivated(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowActivated
    this.PanelContenedor.add(this.crearPanelHuella());
}//GEN-LAST:event_formWindowActivated

    private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
        try {
            Empleado idp = controladorEmpleado.identificarPersona();
            //Tiene huella y la va a actualizar. Pero tengo que verificar que no sea de otro empleado
            if (emple.getBio() != null && emple != idp) {
                controladorEmpleado.actualizarHuella(emple);
                controladorEmpleado.finalizarCaptura();
            }
            ////////Es un empleado nuevo pero sin huella
            if (idp == null) {
                controladorEmpleado.guardarHuella(emple);
                controladorEmpleado.finalizarCaptura();
            }
            if (emple != idp && idp != null) {
                ////////Como tiene huella tengo que verificar con las que hay en base para que sea distinta
                System.out.println("Soy el empleado por huella: " + idp.getApellido());
                System.out.println("Soy el empleado a editar: " + emple.getApellido());
                JOptionPane.showMessageDialog(null, "La huella ingresada corresponde a otro empleado", "Registrar Huella", 2);
                controladorEmpleado.finalizarCaptura();
            }
        } catch (IOException ex) {
            Logger.getLogger(Captura.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NonexistentEntityException ex) {
            Logger.getLogger(Captura.class.getName()).log(Level.SEVERE, null, ex);
        }
        this.dispose();
    }//GEN-LAST:event_btnGuardarActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        setDefaultCloseOperation(Captura.DISPOSE_ON_CLOSE);
    }//GEN-LAST:event_formWindowClosing
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JPanel PanelContenedor;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JPanel jPanel2;
    // End of variables declaration//GEN-END:variables
}
